package exception;

import com.sun.scenario.effect.impl.sw.sse.SSEBlend_SRC_OUTPeer;

/**
 * 异常处理机制中的try-catch
 * 语法:
 * try{
 *     可能出现异常的代码片段
 * }catch(XXXXexception e){
 *     try中出现XXXXException后的处理代码
 * }
 */
public class TryCatchDemo {
    public static void main(String[] args) {
        System.out.println("程序开始....");
        try {
            //String str = null;
            //String str = "";
            String str = "a";
        /*
            当JVM执行到某一句代码发现这里出现异常时,会实例化一个对应的异常实例
            并将当前程序执行过程设置到其中.此时该异常就该表示当前这里出现的问题了
            之后虚拟机会将其抛出.
         */
            System.out.println(str.length());
            System.out.println(str.charAt(0));
            System.out.println(Integer.parseInt(str));
            /*
                try语句块中报错代码一下的内容都不会执行
             */
            System.out.println("!");
        }catch (NullPointerException e){
            System.out.println("出现了空指针异常,在这里被解决了!");
            /*
            catch可以定义多个,针对不同的异常有不同处理方式,可以分别捕获
             */
        }catch (StringIndexOutOfBoundsException e){
            System.out.println("下标越界");
            /*
                最后一个catch处可以捕获Exception,防止因为一个未处理的
                异常导致程序中断
             */
        }catch (Exception e){
            System.out.println("反正出错了!");
        }
        System.out.println("程序结束!");
    }
}
